import {createRouter, createWebHistory} from 'vue-router';
import {useUserStore} from '@/store/UseUserStore.ts';
import NProgress from 'nprogress';
import { routeConfigs } from '@/router/config.ts';
import { useMenuStore } from "@/store/UseMenuStore.ts";

const publicRouteList = [
    'PageError404',
    'PageError403',
    'LoginView',
    'RegisterView'
];

const router = createRouter({
    history: createWebHistory(import.meta.env.BASE_URL),
    routes: routeConfigs
});

// const handleRoutePermission = (to: RouteLocationNormalizedGeneric, _from: RouteLocationNormalizedLoadedGeneric, next: NavigationGuardNext) => {
//     const userStore = useUserStore();
//
//     // 如果是默认首页
//     if (to.path === '/') {
//         const defaultHomeMenu = userStore.defaultHomeMenu;
//         if (defaultHomeMenu) {
//             next({
//                 ...defaultHomeMenu.routerLink,
//                 replace: true
//             });
//             return;
//         }
//         console.log('无默认菜单', to);
//         next({
//             name: 'PageError403'
//         });
//         return;
//     }
//     // 检查权限
//     if (VxeUI.permission.checkVisible(to.name as string)) {
//         next();
//         return;
//     }
//
//     console.log('无权限访问', to);
//
//     next({
//         name: 'PageError403'
//     });
// };

router.beforeEach((to, _from, next) => {
    const userStore = useUserStore();
    NProgress.start();

    // 白名单无需校验权限和用户登录状态
    if (publicRouteList.includes(String(to.name))) {
        next();
        return;
    }

    // 判断是否登录状态，如果用户已登录，跳转对应的页面，否则跳转到登录页面
    if (userStore.loginStatus) {
        if (to.path === '/') {
            // 重定向到 /home
            next({
                path: '/home',
                replace: true
            });
        } else {
            next();
        }
    } else {
        // replace: true 表示不会在浏览器的历史记录中添加新记录，而是替换当前记录，
        // 例如用户从登录页面跳转到首页后，按返回键不会返回到登录页面。
        next({
            name: 'LoginView',
            replace: true
        });
    }
});

router.afterEach((to) => {
    const menuStore = useMenuStore();
    NProgress.done();

    document.title = "光速内部管理系统";
    menuStore.currentMenuName = to.name as string;
});

export default router;
